package utils;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

public class RedisAPI {
    public JedisPool jedisPool;

    public JedisPool getJedisPool() {
        return jedisPool;
    }

    public void setJedisPool(JedisPool jedisPool) {
        this.jedisPool = jedisPool;
    }

    /**
     * 往redis里面添加数据
     * @param key
     * @param value
     * @return
     */
    public boolean set(String key,String value){
        try{
            Jedis jedis = jedisPool.getResource();
            jedis.set(key, value);
            return true;
        }catch (Exception e){
            e.printStackTrace();
            return false;
        }
    }

    /**
     * 添加有时效限制的数据
     * @param key
     * @param expTime
     * @param value
     * @return
     */
    public boolean set(String key,int expTime,String value){
        try{
            Jedis jedis = jedisPool.getResource();
            jedis.setex(key,expTime,value);
        }catch (Exception e){
            e.printStackTrace();
        }

        return false;
    }

    /**
     * 删除redis
     * @param key
     * @return
     */
    public boolean delete(String key){
        try{
            Jedis jedis = jedisPool.getResource();
            jedis.del(key);
            return true;
        }catch (Exception e){
            e.printStackTrace();
        }
        return false;
    }

    /**
     * 判断指定redis是否存在
     * @param key
     * @return
     */
    public boolean exists(String key){
        try{
            Jedis jedis = jedisPool.getResource();

            if (jedis.exists(key))
                return true;
        }catch (Exception e){
            e.printStackTrace();
            return false;
        }
        return false;
    }

    /**
     * 返还到连接池
     * @param pool
     * @param redis
     */
    public static void returnResource(JedisPool pool,Jedis redis){
        if (redis!=null){
            pool.returnResource(redis);
        }
    }

    /**
     * 如果key存在且设置了过期时间，以秒为单位返回剩余有效时间，key不存在返回-2，存在而没有设置过期时间返回-1
     * @param key
     * @return
     */
    public Long ttl(String key){
        try{
            Jedis jedis = jedisPool.getResource();
            return jedis.ttl(key);
        }catch (Exception e){
            e.printStackTrace();
        }
        return Long.valueOf(-2);
    }
    public String get(String key){
        Jedis jedis = null;
        try{
            jedis =  jedisPool.getResource();
            return jedis.get(key);
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            returnResource(jedisPool,jedis);
        }
        return null;
    }
}
